package myjava.interfaccie;

public class Root3 {

    public static void main(String[] args) {

      Foo o = new Foo();
      o.laughAt(new Foo.Laughable() {

         public void makeItLaugh(Foo o) {
            o.laught();
         }
      });
    }
}

class Foo {

   // le interaccie possono anche essere definite internamente ad una classe
   // sono implicitamente statiche!!
   public interface Laughable {
      void makeItLaugh(Foo o);
   }

   public void laughAt(Laughable o) {
      o.makeItLaugh(this);
   }

   void laught() {
      System.out.println("hahahahaha!");
   }
}